#ifndef __SOCKETFILEPAIRE_H__
#define __SOCKETFILEPAIRE_H__

/**
 * @file socketfilepaire.h
 * @brief Structure de donnée associant une socket, un fichier et un socketpair.
 * @author Florian.B
 * @version 0.1
 * @date 28 avril 2012
 *
 */

#include "../tools/list.h"
#include "../tools/charlist.h"
#include "../tools/intlist.h"

/**
 * @struct SocketFilePaire
 * @brief Objet SocketFilePaire
 *
 * SocketFilePair est un objet permettant d'associer une socket, un fichier et un socketpaire. Cela permet au client de relier un fichier en téléchargement à un socket et un socketpaire.
 */
typedef struct _SocketFilePair
{
  char *file /*!< Le fichier utilisé. */;
  int socket /*!< La socket de connexion. */;
  int *socketPair /*!< Le socketpair pour le dialogue entre plusieurs processus. */;
}SocketFilePair;

/**
 * @fn void initialize_SocketFilePair(SocketFilePair *sF, const char *file, const int socket, const int *socketPair);
 * @brief Fonction d'initialisation d'un SocketFilePair.
 *
 * @param[in,out] sF Le SocketFilePair à initialiser.
 * @param file Le nom du fichier.
 * @param socket La socket de connexion.
 */
void initialize_SocketFilePair(SocketFilePair *sF, const char *file, const int socket, int *socketPair);

/**
 * @fn void create_SocketFilePair(Element *sFDest, const Element sFSrc);
 * @brief Fonction d'initialisation d'un SocketFilePair.
 *
 * @param[in,out] sFDest Le SocketFilePair à initialiser.
 * @param sFSrc Le SocketFilePair à copier.
 */
void create_SocketFilePair(Element *socketFileDest, const Element sFSrc);

/**
 * @fn void testament_SocketFilePair(SocketFilePair *sF)
 * @brief Fonction de libération d'un SocketFilePair.
 *
 * @param[in,out] sF SocketFilePair qui sera libérée.
 */
void testament_SocketFilePair(SocketFilePair *sF);

/**
 * @fn void delete_SocketFilePair(Element *sF)
 * @brief Fonction qui détruit un SocketFilePair
 *
 * @param[in,out] sF Le SocketFilePair à détruire.
 */
void delete_SocketFilePair(Element *sF);

/**
 * @fn ListReturn compare_SocketFilePair(Element sFA, Element sFB)
 * @brief Fonction de comparaison d'un SocketFilePair sur la socket si le fichier est NULL et inversement, sinon sur les deux champs de SocketFilePair.
 *
 * @param sFA L'élément A de comparaison.
 * @param sFB L'élément B de comparaison.
 * @return LIST_COMP_EQ si l'elementA et l'elementB sont égaux, LIST_COMP_DIF sinon.
 */
ListReturn compare_SocketFilePair(Element sFA, Element sFB);

#endif
